# g++ -fopenmp -o 0_vector_avg_multi_matrix_cpu_code.exe 0_vector_avg_multi_matrix_cpu_code.cpp
# mxcc  -lineinfo -o 1_vector_avg_multi_matrix_cpu_porting.exe 1_vector_avg_multi_matrix_cpu_porting.maca 
# mxcc  -lineinfo -o 2_vector_avg_multi_matrix_launch_optimize.exe 2_vector_avg_multi_matrix_launch_optimize.maca 
# mxcc  -lineinfo -o 3_vector_avg_multi_matrix_global_coalesced.exe 3_vector_avg_multi_matrix_global_coalesced.maca 
# mxcc  -lineinfo -o 4_vector_avg_multi_matrix_shared_reusing.exe 4_vector_avg_multi_matrix_shared_reusing.maca 
# mxcc  -lineinfo -o 5_vector_avg_multi_matrix_vendor_blas.exe 5_vector_avg_multi_matrix_vendor_blas.maca -lmcblas 

# 设置CFLAGS
CFLAGS = -Wall -Werror
CFLAGS += -w #设置警告级别为最低

# make命令在没有指定目标时会执行第一个目标，通常命名为"all"。
# 这里的all依赖于所有的.exe文件，这意味着执行make时会构建所有的可执行文件。
all : 0_vector_avg_multi_matrix_cpu_code.exe 1_vector_avg_multi_matrix_cpu_porting.exe 2_vector_avg_multi_matrix_launch_optimize.exe 3_vector_avg_multi_matrix_global_coalesced.exe 4_vector_avg_multi_matrix_shared_reusing.exe 5_vector_avg_multi_matrix_vendor_blas.exe

# 以下是各个目标文件的构建规则
# 依赖关系：每个.exe文件都依赖于对应的.cpp/.maca 源文件
0_vector_avg_multi_matrix_cpu_code.exe : 0_vector_avg_multi_matrix_cpu_code.cpp
	mxcc $(CFLAGS)  -fopenmp -lineinfo -o 0_vector_avg_multi_matrix_cpu_code.exe 0_vector_avg_multi_matrix_cpu_code.cpp

# $@ 表示目标文件名（等号左边）
# $^ 表示所有依赖文件（等号右边）
# 构建CPU代码简单移植的vector_avg_multi_matrix(向量平均和矩阵向量乘法)版本
1_vector_avg_multi_matrix_cpu_porting.exe : 1_vector_avg_multi_matrix_cpu_porting.maca 
	mxcc $(CFLAGS)  -fopenmp -lineinfo -o $@ $^

# 构建启动配置改进的vector_avg_multi_matrix(向量平均和矩阵向量乘法)版本
2_vector_avg_multi_matrix_launch_optimize.exe : 2_vector_avg_multi_matrix_launch_optimize.maca 
	mxcc $(CFLAGS)  -fopenmp -lineinfo -o $@ $^

# 构建全局内存合并访问改进的vector_avg_multi_matrix(向量平均和矩阵向量乘法)版本
3_vector_avg_multi_matrix_global_coalesced.exe : 3_vector_avg_multi_matrix_global_coalesced.maca 
	mxcc $(CFLAGS)  -fopenmp -lineinfo -o $@ $^

# 构建共享内存重用改进的vector_avg_multi_matrix(向量平均和矩阵向量乘法)版本
4_vector_avg_multi_matrix_shared_reusing.exe : 4_vector_avg_multi_matrix_shared_reusing.maca 
	mxcc $(CFLAGS)  -fopenmp -lineinfo -o $@ $^

# 构建使用厂商专家加速库的vector_avg_multi_matrix(向量平均和矩阵向量乘法)版本
5_vector_avg_multi_matrix_vendor_blas.exe : 5_vector_avg_multi_matrix_vendor_blas.maca 
	mxcc $(CFLAGS)  -fopenmp -lineinfo -lmcblas -o $@ $^ 

# 清理目标，删除所有生成的可执行文件
# 通配符使用。这里用到了*.exe这样的通配符，它会匹配所有以.exe结尾的文件。通配符在文件匹配时非常有用。
clean :
	rm -rf *.exe